package com.hanamaki.study.utils.jdbc;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
 * 工具类
 */
public class JdbcUtils {
    /* 数据库配置信息 */
    static String userName;
    static String passWord;
    static String url;
    static String driver;
    static Connection connection;
    static Statement statement;
    static ResultSet resultSet;

    /* 静态代码块中 初始化配置信息 */
    static {
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src/com/hanamaki/study/utils/jdbc/myData.ini"));
            userName = properties.getProperty("username");
            passWord = properties.getProperty("password");
            url = properties.getProperty("url");
            driver = properties.getProperty("driver");
        } catch (IOException e) {
            e.printStackTrace();
        }

        /* 注册驱动 */
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


    }


    /**
     * 编写数据库连接的方法
     */
    public static Connection getSql() throws SQLException {
        return DriverManager.getConnection(url, userName, passWord);
    }


    /**
     * 编写查询数据库中的数据的方法
     */
    public static ResultSet getSqlContent(String tableName) {
        try {
             connection = JdbcUtils.getSql();
            /* 创建一个新建查询对象 并且编写sql语句执行查询查询  */
             statement = connection.createStatement();

             /* 编写sql */
            String sql = "select * from " + tableName;

            resultSet = statement.executeQuery(sql);
        } catch (Exception throwables) {
            System.out.println("数据库异常！");
        }

        return resultSet;

    }

    /*  读取数据库表的数据 使其返回值  是一个 二维数组*/
    public static String[][] getSqlContentPar(String tableName) throws Exception{

        String result[][];

        Connection connection = JdbcUtils.getSql();
        /*  Statement 会出现sql 注入问题 */
        Statement statement = connection.createStatement();
        /* 编写sql 执行查询 */
        String sql = "select first_par,second_par,exp_par from "+tableName;
        ResultSet resultSet = statement.executeQuery(sql);
        /* 只需要 得到 在一个数据表中 一共有多想少列 就可以遍历出来一整行的数据 */
        /* ResultSetMetaData 对象中 存储了数据表的映射  行 和 列 */
        ResultSetMetaData metaData = resultSet.getMetaData();
        /* 获得数据表中的 所有的列数 */
        int columnCount = metaData.getColumnCount();
        /* 创建一个集合 来存储一维数组 */
        List<String[]> list = new ArrayList<>();
        /* 通过  列数 来获得 一行的数据*/
        while (resultSet.next()) {
            /* 创建一维数组来 保存每次取出来的 一整行的 数据 */
            String array[] = new String[columnCount];
            for (int i = 0; i < columnCount; i++) {
                array[i] = resultSet.getString(i + 1);
            }
            list.add(array);

        }

        /* 将 数据 放入到 数组中 */
        result = new String[list.size()][];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }

        return result;
    }

    /**
     * 释放数据库的连接  ctrl + shift + y
     * ctrl + shift + x
     */
    public static void release(ResultSet resultSet) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (Exception throwables) {
            throwables.printStackTrace();
        } finally {
        }
    }


}
